package com.xuecheng.media.service;

import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDTO;
import com.xuecheng.media.model.po.MediaFiles;
import com.xuecheng.media.model.vo.UploadFileResultVO;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author Mr.M
 * @version 1.0
 * @description 媒资文件管理业务类
 * @date 2022/9/10 8:55
 */
public interface MediaFileService {

  /**
   * @param pageParams          分页参数
   * @param queryMediaParamsDto 查询条件
   * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
   * @description 媒资文件查询方法
   * @author Mr.M
   * @date 2022/9/10 8:57
   */
  PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

  UploadFileResultVO uploadFile(Long companyId, UploadFileParamsDTO uploadFileParamsDTO, String localFilePath);

  MediaFiles addMediaFilesToDb(Long companyId, String fileMd5, UploadFileParamsDTO uploadFileParamsDto, String bucket, String objectName);


  /**
   * @param fileMd5 文件的md5
   * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
   * @description 检查文件是否存在
   * @author Mr.M
   * @date 2022/9/13 15:38
   */
  public RestResponse<Boolean> checkFile(String fileMd5);

  /**
   * @param fileMd5    文件的md5
   * @param chunkIndex 分块序号
   * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
   * @description 检查分块是否存在
   * @author Mr.M
   * @date 2022/9/13 15:39
   */
  public RestResponse<Boolean> checkChunk(String fileMd5, int chunkIndex);

  /**
   * @param fileMd5            文件md5
   * @param chunk              分块序号
   * @param localChunkFilePath 分块文件本地路径
   * @return com.xuecheng.base.model.RestResponse
   * @description 上传分块
   * @author Mr.M
   * @date 2022/9/13 15:50
   */
  public RestResponse uploadChunk(String fileMd5, int chunk, String localChunkFilePath);


  /**
   * @param companyId           机构id
   * @param fileMd5             文件md5
   * @param chunkTotal          分块总和
   * @param uploadFileParamsDto 文件信息
   * @return com.xuecheng.base.model.RestResponse
   * @description 合并分块
   * @author Mr.M
   * @date 2022/9/13 15:56
   */
  public RestResponse mergechunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDTO uploadFileParamsDto);

}
